home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / BitSet.C < prev    next >
C/C++ Source or Header  |  1990-05-28  |  1KB  |  73 lines

  1. //$BitSet,BitSetIter$
  2. #include "BitSet.h"
  3.  
  4. MetaImpl(BitSet, (T(m), 0));
  5.  
  6. ObjPtr BitSet::DeepClone()
  7. {
  8.     return Clone();
  9. }
  10.  
  11. int BitSet::Capacity()     
  12.     return sizeof(int)*8; 
  13. }
  14.  
  15. u_long BitSet::Hash() 
  16. {   
  17.     return m; 
  18. }
  19.     
  20. bool BitSet::IsEmpty()  
  21.     return m==0; 
  22. }
  23.     
  24. bool BitSet::IsEqual(Object* ob)
  25. {
  26.     return ob->IsKindOf(BitSet) && m == ((BitSet*)ob)->m;
  27. }
  28.  
  29. ostream& BitSet::PrintOn (ostream& s)
  30. {
  31.     Object::PrintOn(s);
  32.     return s << m SP;  
  33. }
  34.  
  35. istream& BitSet::ReadFrom (istream& s)
  36. {
  37.     long mm;
  38.     Object::ReadFrom(s);
  39.     s >> mm;
  40.     m= (u_long) mm;
  41.     return s;
  42. }
  43.  
  44. int BitSet::Size()
  45. {
  46.     register u_long l, n;
  47.  
  48.     for (l= m, n= 0; l != 0; n++)
  49.     l &= (l-1);     // removes rightmost 1 
  50.     return n;
  51. }
  52.  
  53. //---- class BitSetIter ----------------------------------------------------
  54.  
  55. void BitSetIter::Reset(BitSet *s)
  56. {
  57.     cb= s;
  58.     pos= 0;
  59. }
  60.     
  61. int BitSetIter::operator()()
  62. {
  63.     while (!cb->Includes(pos) && pos < cb->Capacity())
  64.     pos++;
  65.     if (pos == cb->Capacity())
  66.     return 0;
  67.     return pos++;
  68. }
  69.  
  70.  
  71.